昨天有向各位提到,Package 是 ROS 專案中最基礎的元素之一,我們可以視情況與需求,透過執行不同功能的 Package 來完成專案。同時,我們也能夠直接使用別人已經建立好的 Package 套用在自己的專案上,如此一來便能達到 ROS 的核心價值——站在別人的肩膀上,繼續前進。但如果今天別人做的 Package 不符合自己的需求時該怎麼辦呢?
首先,我們可以先看一個簡單的 Package 結構,好對 Package 有初步的瞭解:
可以看到,Package 裡面包含三個基本檔案,CMakeLists.txt
, package.xml
, src
,其各自的功能在昨天也有提到,這邊就不再介紹。
當然,創建一個 Package 時並不需要自己慢慢的用指令新建資料夾與檔案,我們能透過 catkin 指令快速的建置一個 Package:
cd catkin_ws/src/
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]…
指令裡頭的 <package_name>
便是自己所命名的 Package 名稱,[depend]
則是相依模組,白話一點就是這個 Package 需要包含哪些東西才能執行,可以根據 Package 中的檔案會用到哪些資料型態 (std、bool...) 和語法 (如Python、C...) 來添加自己所需的模組。以下示範則是執行 depends 當中含有 std_msgs
, rospy
, roscpp
的結果:
depend 當中的 std_msgs
與 Package 的資料型別有關,代表; rospy
與 roscpp
則表示 Package 與 Python 和 C++ 語法有關,這些 depends 都被定義在剛剛所提到的 package.xml
當中,我們可以利用 vi
開啟 Package.xml 來查看:
cd beginner_tutorial/
vi package.xml
我們可以看到當中包含了許多 depends,所以說也不用擔心一開始在建立 Package 時就要一次建立完成,若有任何 depends 遺漏都能在這邊進行補充。更詳細的 depend 類型可以參考官網。
建立完成後,記得回到 catkin_ws/
下執行 catkin_make
,讓工作區成功建立這個 Package。
catkin_make
除了建立 Package 後需要執行 catkin_make
之外,若是修改了 Package.xml 後我們也必須執行這個指令,目的在於必須讓 catkin 再次編譯這個 Package。
以上便成功建立好屬於自己的 Package 了,步驟是不是很簡單呢?只要設定好名稱與相依模組,再執行 catkin_make
就完成了。接著再介紹一些可以在根目錄下直接操作 ROS Package 的相關指令,較常見的有:
roscd <Package_name> -快速進入到該 Package下。 (相當實用)
rosls <Package_name> -顯示該 Package 下含有的文件。
rospack depends <Package_name> -顯示該 Package 所有的 depends。
rospack find <Package_name> -回傳該 Package 的路徑。
建置 Package 是不是很簡單呢?有了自己的 Package 終於能開始編寫專案啦!因此明天就會教大家 ROS 專案的整體架構以及運作方式,請大家敬請期待~